package com.szwistar.common.datastruct;

import java.util.HashMap;

/**
 * <p>整数值 <-> 字符串 对应表
 * <p>经常用于做“错误码<->错误信息”、“整数枚举值<->名称”的映射
 */
@SuppressWarnings("serial")
public class IntStringMap extends HashMap<Integer, String> {
	/**
	 * 简便方式构建
	 * @param args 数值-字符串映射表，格式为 int, string, int, string ...(必须成对)
	 */
	public IntStringMap(Object ...args) {
		super();

		// 检查参数个数是否成对
		if(args == null || (args.length%2 != 0)) { throw new RuntimeException("参数个数必须为偶数！"); }

		for(int i=0; i<args.length/2; i++) {
			// 检查参数类型
			if(!(args[2*i] instanceof Integer) || !(args[2*i+1] instanceof String)) { throw new RuntimeException("错误的参数类型！"); }
			// 取得 k-v
			Integer key = (Integer)args[2*i];
			String val = (String)args[2*i+1]; if(val == null) { continue; }
			// 放入表中
			put(key, val);
		}
	}

	/**
	 * 获取值对应的字符串
	 * @param value 数值。
	 * @param defaultName 默认名称。
	 * @return 返回值对应的字符串；如果 name 为 null，或不存在，则返回 defaultName。
	 */
	public String get(Integer value, String defaultName) {
		if(value == null) { return defaultName; }
		String name = get(value);
		return name != null ? name : defaultName;
	}
}
